<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <title>InfinityJEEEU Java Code Generator</title>
        <link href="../css/default.css" rel="stylesheet" type="text/css" />
        <script type="text/javascript" src="../js/jquery-1.11.1.min.js"></script>
    </head>   
    <body>
        <div id="wrapper">
        <div id="header_wide">
    <div id="logo">
        <h1><a href="../html/index.html">无垠式Java通用代码生成器</a></h1>
        <h2><a href="../html/index.html">自2014年起为公众服务</a></h2>
    </div>
    <!-- end div#logo -->
    <!-- end div#menu -->
	</div>
            <!-- end div#header -->
            <div id="page_wide">
                <div id="content_wide">
	<h3>代码生成器技术乱弹一，多对多关系与双域动词</h3>
	<p>在动词算子式代码生成器（无垠式代码生成器，和平之翼代码生成器）中的中心概念是如下三种，动词算子，域对象和棱柱。本文主要分析如下技术场景，使用上述概念分析和实现代码生成器中的多对多关系。</p>

    <p>我们知道，大多数代码生成器生成的功能大家都称之为单表操作，在动词算子式代码生成器中有一个对应的概念称为单域动词。在和平之翼代码生成器1.5实现多对多关系以前，所有的动词算子式代码生成器只支持单域动词，也就是说和现在大多数代码生成器是一样的。多对多关系为何不同？</p>

    <p>原因是多对多关系不是单表操作，而是一种双表操作。使用动词算子式代码生成器的术语，这是一种双域动词。描述了主域对象和从域对象之间的关系。具体说来为了实现两个对象之间的多对多关系，在和平之翼代码生成器1.5和以后的其它实现中，都实现了如下四个双域动词：ListMyActive，ListMyAvailableActive,Assign和Revoke，和单域动词不同，单域动词只属于其域对象的棱柱，而双域动词关系到两个棱柱。比如对域对象User而言，ListAll单域动词明显属于UserPrism棱柱。而User和Role之间的多对多关系应该属于User Prism还是RolePrism? 答案很简单，看谁是主域对象，谁是从域对象。如果User是主域对象，动词分别结合为ListMyActiveRolesByUserId，ListMyAvailableRolesByUserId, AssginRolesToUser,RevokeRolesFromUser，这时很明显这些功能都从属于UserPrism。</p>

    <p>从理论上说，多对多关系意味者两个数据对象之间存在着一张联系表，其联合主键是两个对象的主键。在动词算子式代码生成器中，主键即所有域对象都有的domainid字段。所以很容易构造出两个域对象之间的多对多关系。</p>

    <p>对多对多的典型三栏式多对多单页式弹性界面如图所示，使用了一个单域动词和4个双域动词。</p>

    <p>如图：</p><p><img src="images/mtm.png" width="600" /><p>

    <p>左侧的User列表框是User域对象的ListActive单域动词驱动的。中间的列表框，是ListMy双域动词。右侧的列表框是ListMyAvailable双域动词驱动的。中间和右侧列表框之间的两个按钮，是Assign和Revoke双域动词驱动的。一目了然，非常清晰，希望您可以理解。</p>
                  </div>
                <!-- end div#content -->
                <div id="sidebar">
                    <!--ul-->
                    	<!-- Common Navigation Panel for our site -->
						<li id="submenu">
						    <h2>功能菜单</h2>
						    <ul>
						    　	<li><a href="../html/index.html">使用SGS生成代码</a></li>
						     	 <li><a href="../html/parseexcel.html">使用Excel生成代码</a></li>
						      	<li><a href="luantan_index.html">动词算子式代码生成器简介</a></li>
								<li><a href="luantan_1.html">代码生成器技术乱弹一，多对多关系与双域动词</a></li>
								<li><a href="luantan_2.html">代码生成器技术乱弹二，一对多关系的分析与实现</a></li>
								<li><a href="luantan_3.html">代码生成器技术乱弹三，所有字段搜索的主查询</a></li>
								<li><a href="luantan_4.html">代码生成器技术乱弹四，弹性万能界面</a></li>
								<li><a href="luantan_5.html">代码生成器技术乱弹五，动词算子浅析</a></li>
								<li><a href="luantan_6.html">代码生成器技术乱弹六，编译器在拈花微笑</a></li>
								<li><a href="luantan_7.html">代码生成器技术乱弹七，动词算子式代码生成器的透明性</a></li>
								<li><a href="luantan_8.html">代码生成器技术乱弹八，系统族与笛卡尔空间</a></li>
								<li><a href="luantan_9.html">代码生成器技术乱弹九，代码变变变，代码生成器之度量</a></li>
								<li><a href="luantan_10.html">代码生成器技术乱弹十，动词与多维空间，动词变格理论简述</a></li>
								<li><a href="luantan_11.html">代码生成器技术乱弹十一，伽罗华理论与代码生成器</a></li>
								<li><a href="luantan_12.html">代码生成器技术乱弹十二，步枪，T型车到代码生成器，模板法的工业魔术</a></li>

						    </ul>
						</li>
                    <!--/ul-->
                </div>
                <!-- end div#sidebar -->
                <div style="clear: both; height: 1px"></div>
            </div>
            <!-- Common footer for our site -->
			<div id="footer_wide">
			    <p id="legal">作者：火鸟  电邮:jerry_shen_sjf@qq.com QQ群:277689737<br/>
			    </p>
			</div>
        </div>
        <!-- end div#wrapper -->
</body>
</html>